home *** CD-ROM | disk | FTP | other *** search
- Path: xanth!nic.MR.NET!hal!ncoast!allbery
- From: creps@silver.bacs.indiana.edu (Steve Creps)
- Newsgroups: comp.sources.misc
- Subject: v05i024: PCcurses version 1.3, part 2/5
- Message-ID: <2566@silver.bacs.indiana.edu>
- Date: 31 Oct 88 02:51:25 GMT
- Sender: allbery@ncoast.UUCP
- Reply-To: creps@silver.bacs.indiana.edu (Steve Creps)
- Organization: IU CS Dept
- Lines: 1791
- Approved: allbery@ncoast.UUCP
-
- Posting-number: Volume 5, Issue 24
- Submitted-by: "Steve Creps" <creps@silver.bacs.indiana.edu>
- Archive-name: pc-curses-1.3/Part2
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 2 (of 5)."
- # Contents: attrib.c boxes.c chardel.c charins.c clrtobot.c clrtoeol.c
- # curspriv.h linedel.c lineins.c options.c overlay.c refresh.c
- # setmode.c setterm.c
- # Wrapped by creps@silver on Fri Oct 28 17:43:07 1988
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'attrib.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'attrib.c'\"
- else
- echo shar: Extracting \"'attrib.c'\" \(3805 characters\)
- sed "s/^X//" >'attrib.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Character attribute routines of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Rcsid[] string for maintenance: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_attrib_rcsid[] = "@(#)attrib.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wattrset() sets the attributes as specified in window 'win'. */
- X/****************************************************************/
- X
- Xvoid wattrset(win,attrs)
- X WINDOW *win;
- X int attrs;
- X {
- X win->_attrs = attrs & ATR_MSK;
- X } /* wattrset */
- X
- X/****************************************************************/
- X/* Wattron() sets the specified attribute(s) in window 'win'. */
- X/****************************************************************/
- X
- Xvoid wattron(win,attrs)
- X WINDOW *win;
- X int attrs;
- X {
- X win->_attrs |= (attrs & ATR_MSK);
- X } /* wattron */
- X
- X/****************************************************************/
- X/* Wattroff() clears the specified attribute(s) in window */
- X/* 'win'. */
- X/****************************************************************/
- X
- Xvoid wattroff(win,attrs)
- X WINDOW *win;
- X int attrs;
- X {
- X win->_attrs &= (~attrs & ATR_MSK);
- X } /* wattroff */
- X
- X/****************************************************************/
- X/* Wstandout() starts standout mode in window 'win'. */
- X/****************************************************************/
- X
- Xvoid wstandout(win)
- X WINDOW *win;
- X {
- X win->_attrs = A_STANDOUT;
- X } /* wstandout */
- X
- X/****************************************************************/
- X/* Wstandend() clears all special attributes in window 'win'. */
- X/****************************************************************/
- X
- Xvoid wstandend(win)
- X WINDOW *win;
- X {
- X win->_attrs = ATR_NRM;
- X } /* wstandend */
- X
- X/****************************************************************/
- X/* Attrset() sets the attributes as specified in stdscr. */
- X/****************************************************************/
- X
- Xvoid attrset(attrs)
- X int attrs;
- X {
- X stdscr->_attrs = attrs & ATR_MSK;
- X } /* attrset */
- X
- X/****************************************************************/
- X/* Attron() sets the specified attribute(s) in stdscr. */
- X/****************************************************************/
- X
- Xvoid attron(attrs)
- X int attrs;
- X {
- X stdscr->_attrs |= (attrs & ATR_MSK);
- X } /* attron */
- X
- X/****************************************************************/
- X/* Attroff() clears the specified attribute(s) in stdscr. */
- X/****************************************************************/
- X
- Xvoid attroff(attrs)
- X int attrs;
- X {
- X stdscr->_attrs &= (~attrs & ATR_MSK);
- X } /* attroff */
- X
- X/****************************************************************/
- X/* Standout() starts standout mode in stdscr. */
- X/****************************************************************/
- X
- Xvoid standout()
- X {
- X stdscr->_attrs = A_STANDOUT;
- X } /* standout */
- X
- X/****************************************************************/
- X/* Standend() clears all special attributes in stdscr. */
- X/****************************************************************/
- X
- Xvoid standend()
- X {
- X stdscr->_attrs = ATR_NRM;
- X } /* standend */
- END_OF_FILE
- if test 3805 -ne `wc -c <'attrib.c'`; then
- echo shar: \"'attrib.c'\" unpacked with wrong size!
- fi
- # end of 'attrib.c'
- fi
- if test -f 'boxes.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'boxes.c'\"
- else
- echo shar: Extracting \"'boxes.c'\" \(4197 characters\)
- sed "s/^X//" >'boxes.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Box() routines of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC '-W3', Turbo'C' '-w -w-pro' checks. Support */
- X/* for border(), wborder() functions: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_boxes_rcsid[] = "@(#)boxes.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* wbox(win,ymin,xmin,ymax,xmax,v,h) draws a box in window */
- X/* 'win', enclosing the area xmin-xmax and ymin-xmax. If */
- X/* xmax and/or ymax is 0, the window max value is used. 'v' and */
- X/* 'h' are the vertical and horizontal characters to use. If */
- X/* 'v' and 'h' are PC grapics lines, wbox will make the corners */
- X/* in a pretty way. */
- X/****************************************************************/
- X
- Xint wbox(win,ymin,xmin,ymax,xmax,v,h)
- X WINDOW *win;
- X int ymin;
- X int xmin;
- X int ymax;
- X int xmax;
- X char v;
- X char h;
- X {
- X static int l, r, t, b, tl, tr, bl,br; /* border chars */
- X int i;
- X
- X if (ymax == 0)
- X ymax = win->_maxy - 1;
- X if (xmax == 0)
- X xmax = win->_maxx - 1;
- X
- X if (ymin >= win->_maxy || ymax > win->_maxy ||
- X xmin >= win->_maxx || xmax > win->_maxx ||
- X ymin >= ymax || xmin >= xmax
- X )
- X return(ERR);
- X
- X l = r = v & 0xff; /* get rid of sign-extended int */
- X t = b = h & 0xff;
- X tl = tr = bl = br = v; /* default same as vertical */
- X
- X if (l == 0xba) /* vertical double bars */
- X {
- X if (t == 0xcd) /* horizontal too? */
- X {tl=0xc9;tr=0xbb;bl=0xc8;br=0xbc;}/* use double bar corners */
- X else
- X {tl=0xd6;tr=0xb7;bl=0xd3;br=0xbd;}/* use hor-s vert-d corners */
- X } /* if */
- X
- X if (l == 0xb3) /* vertical single bars */
- X {
- X if (t == 0xcd)
- X {tl=0xd5;tr=0xb8;bl=0xd4;br=0xbe;}/* horizontal double bars */
- X else
- X {tl=0xda;tr=0xbf;bl=0xc0;br=0xd9;}/* use hor-s vert-s bars */
- X } /* if */
- X
- X if (win->_borderchars[0]) /* border() settings override parms */
- X l = win->_borderchars[0];
- X if (win->_borderchars[3])
- X r = win->_borderchars[1];
- X if (win->_borderchars[3])
- X t = win->_borderchars[2];
- X if (win->_borderchars[3])
- X b = win->_borderchars[3];
- X if (win->_borderchars[4])
- X tl = win->_borderchars[4];
- X if (win->_borderchars[5])
- X tr = win->_borderchars[5];
- X if (win->_borderchars[6])
- X bl = win->_borderchars[6];
- X if (win->_borderchars[7])
- X br = win->_borderchars[7];
- X
- X for (i = xmin+1;i <= xmax-1;i++)
- X {
- X win->_line[ymin][i] = t | win->_attrs;
- X win->_line[ymax][i] = b | win->_attrs;
- X }
- X for (i = ymin+1;i <= ymax-1;i++)
- X {
- X win->_line[i][xmin] = l | win->_attrs;
- X win->_line[i][xmax] = r | win->_attrs;
- X }
- X win->_line[ymin][xmin] = tl | win->_attrs;
- X win->_line[ymin][xmax] = tr | win->_attrs;
- X win->_line[ymax][xmin] = bl | win->_attrs;
- X win->_line[ymax][xmax] = br | win->_attrs;
- X
- X for (i=ymin; i <= ymax ; i++)
- X {
- X if (win->_minchng[i] == _NO_CHANGE)
- X {
- X win->_minchng[i] = xmin;
- X win->_maxchng[i] = xmax;
- X } /* if */
- X else
- X {
- X win->_minchng[i] = min(win->_minchng[i], xmin);
- X win->_maxchng[i] = max(win->_maxchng[i], xmax);
- X } /* else */
- X } /* for */
- X return(OK);
- X } /* box */
- X
- X/****************************************************************/
- X/* box(win,v,h) draws a box around window window 'win'. 'v' and */
- X/* 'h' are the vertical and horizontal characters to use. */
- X/****************************************************************/
- X
- Xvoid box(win,v,h)
- X WINDOW *win;
- X char v;
- X char h;
- X {
- X wbox(win,0,0,0,0,v,h);
- X } /* box */
- END_OF_FILE
- if test 4197 -ne `wc -c <'boxes.c'`; then
- echo shar: \"'boxes.c'\" unpacked with wrong size!
- fi
- # end of 'boxes.c'
- fi
- if test -f 'chardel.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'chardel.c'\"
- else
- echo shar: Extracting \"'chardel.c'\" \(3106 characters\)
- sed "s/^X//" >'chardel.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Wdelch() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_chardel_rcsid[] = "@(#)chardel.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wdelch() deletes the character at the window cursor, and the */
- X/* characters to the right of it are shifted left, inserting a */
- X/* space at the last position of the line. */
- X/****************************************************************/
- X
- Xint wdelch(win)
- X WINDOW *win;
- X {
- X int *temp1;
- X int *temp2;
- X int *end;
- X short y = win->_cury;
- X short x = win->_curx;
- X short maxx = win->_maxx - 1;
- X
- X end = &win->_line[y][maxx];
- X temp1 = &win->_line[y][x];
- X temp2 = temp1 + 1;
- X while (temp1 < end)
- X *temp1++ = *temp2++;
- X *temp1 = ' ' | (win->_attrs & ATR_MSK);
- X win->_maxchng[y] = maxx;
- X if (win->_minchng[y] == _NO_CHANGE || win->_minchng[y] > x)
- X win->_minchng[y] = x;
- X return(OK);
- X } /* wdelch */
- X
- X/****************************************************************/
- X/* Delch() deletes the character at the stdscr cursor, and the */
- X/* characters to the right of it are shifted left, inserting a */
- X/* space at the last position of the line. */
- X/****************************************************************/
- X
- Xint delch()
- X {
- X return(wdelch(stdscr));
- X } /* delch */
- X
- X/****************************************************************/
- X/* Mvdelch() moves the stdscr cursor to a new position, then */
- X/* deletes the character at the stdscr cursor, and the charac- */
- X/* ters to the right of it are shifted left, inserting a space */
- X/* at the last position of the line. */
- X/****************************************************************/
- X
- Xint mvdelch(y,x)
- X int y;
- X int x;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(wdelch(stdscr));
- X } /* mvdelch */
- X
- X/****************************************************************/
- X/* Mvwdelch() moves the cursor of window 'win' to a new posi- */
- X/* tion, then deletes the character at the stdscr cursor, and */
- X/* the characters to the right of it are shifted left, inser- */
- X/* ting a space at the last position of the line. */
- X/****************************************************************/
- X
- Xint mvwdelch(win,y,x)
- X WINDOW *win;
- X int y;
- X int x;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(wdelch(win));
- X } /* mvwdelch */
- END_OF_FILE
- if test 3106 -ne `wc -c <'chardel.c'`; then
- echo shar: \"'chardel.c'\" unpacked with wrong size!
- fi
- # end of 'chardel.c'
- fi
- if test -f 'charins.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'charins.c'\"
- else
- echo shar: Extracting \"'charins.c'\" \(5462 characters\)
- sed "s/^X//" >'charins.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Winsch() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.1: Added 'raw' output routines (allows PC charac- */
- X/* ters < 0x20 to be displayed: 880306 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_charins_rcsid[] = "@(#)charins.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* _Chins() inserts character 'c' at the cursor position in */
- X/* window 'win'. If xlat is true, normal character translation */
- X/* is performed; If xlat is false, the character is output 'as */
- X/* is'. */
- X/****************************************************************/
- X
- Xstatic int _chins(win,c,xlat)
- X WINDOW *win;
- X char c;
- X bool xlat;
- X {
- X int *temp1;
- X int *temp2;
- X int *end;
- X int x = win->_curx;
- X int y = win->_cury;
- X int maxx = win->_maxx - 1;
- X
- X if((c < ' ') && (c == '\n' || c == '\r' || c == '\t' || c == '\b'))
- X return(_chadd(win,c,xlat));
- X end = &win->_line[y][x];
- X temp1 = &win->_line[y][maxx];
- X temp2 = temp1 - 1;
- X if((c < ' ') && xlat) /* if CTRL-char make space for 2 */
- X temp2--;
- X while (temp1 > end)
- X *temp1-- = *temp2--;
- X win->_maxchng[y] = maxx;
- X if ((win->_minchng[y] == _NO_CHANGE) || (win->_minchng[y] > x))
- X win->_minchng[y] = x;
- X return(_chadd(win,c,xlat)); /* fixes CTRL-chars too */
- X } /* _chins */
- X
- X/****************************************************************/
- X/* Insch() inserts character 'c' at the cursor position in */
- X/* stdscr. The cursor is advanced. */
- X/****************************************************************/
- X
- Xint insch(c)
- X char c;
- X {
- X return(_chins(stdscr,c,TRUE));
- X } /* insch */
- X
- X/****************************************************************/
- X/* Winsch() inserts character 'c' at the cursor position in */
- X/* window 'win'. The cursor is advanced. */
- X/****************************************************************/
- X
- Xint winsch(win,c)
- X WINDOW *win;
- X char c;
- X {
- X return(_chins(win,c,TRUE));
- X } /* winsch */
- X
- X/****************************************************************/
- X/* Mvinsch() moves the stdscr cursor to a new position, then */
- X/* inserts character 'c' at the cursor position in stdscr. The */
- X/* cursor is advanced. */
- X/****************************************************************/
- X
- Xint mvinsch(y,x,c)
- X int y;
- X int x;
- X char c;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(_chins(stdscr,c,TRUE));
- X } /* mvinsch */
- X
- X/****************************************************************/
- X/* Mvwinsch() moves the cursor of window 'win' to a new posi- */
- X/* tion, then inserts character 'c' at the cursor position in */
- X/* window 'win'. The cursor is advanced. */
- X/****************************************************************/
- X
- Xint mvwinsch(win,y,x,c)
- X WINDOW *win;
- X int y;
- X int x;
- X char c;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(_chins(win,c,TRUE));
- X } /* mvwinsch */
- X
- X/****************************************************************/
- X/* Insrawch() inserts character 'c' at the cursor position in */
- X/* stdscr. Control characters are not interpreted, and the */
- X/* cursor is advanced. */
- X/****************************************************************/
- X
- Xint insrawch(c)
- X char c;
- X {
- X return(_chins(stdscr,c,FALSE));
- X } /* insrawch */
- X
- X/****************************************************************/
- X/* Winsrawch() inserts character 'c' at the cursor position in */
- X/* window 'win'. Control characters are not interpreted, and */
- X/* the cursor is advanced. */
- X/****************************************************************/
- X
- Xint winsrawch(win,c)
- X WINDOW *win;
- X char c;
- X {
- X return(_chins(win,c,FALSE));
- X } /* winsrawch */
- X
- X/****************************************************************/
- X/* Mvinsrawch() moves the stdscr cursor to a new position, then */
- X/* inserts character 'c' at the cursor position in stdscr. */
- X/* Control characters are not interpreted, and the cursor is */
- X/* advanced. */
- X/****************************************************************/
- X
- Xint mvinsrawch(y,x,c)
- X int y;
- X int x;
- X char c;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(_chins(stdscr,c,FALSE));
- X } /* mvinsrawch */
- X
- X/****************************************************************/
- X/* Mvwinsrawch() moves the cursor of window 'win' to a new */
- X/* position, then inserts character 'c' at the cursor position */
- X/* in window 'win'. Control characters are not interpreted, and */
- X/* the cursor is advanced. */
- X/****************************************************************/
- X
- Xint mvwinsrawch(win,y,x,c)
- X WINDOW *win;
- X int y;
- X int x;
- X char c;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(_chins(win,c,FALSE));
- X } /* mvwinsrawch */
- END_OF_FILE
- if test 5462 -ne `wc -c <'charins.c'`; then
- echo shar: \"'charins.c'\" unpacked with wrong size!
- fi
- # end of 'charins.c'
- fi
- if test -f 'clrtobot.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'clrtobot.c'\"
- else
- echo shar: Extracting \"'clrtobot.c'\" \(3336 characters\)
- sed "s/^X//" >'clrtobot.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Wclrtobot() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.1: Renamed clrbot() to clrtobot(). Reported by */
- X/* Eric Rosco: 870907 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_clrtobot_rcsid[] = "@(#)clrtobot.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wclrtobot() fills the right half of the cursor line of */
- X/* window 'win', and all lines below it with blanks. */
- X/****************************************************************/
- X
- Xint wclrtobot(win)
- X WINDOW *win;
- X {
- X int y;
- X int minx;
- X static int startx;
- X static int *ptr;
- X static int *end;
- X static int *maxx;
- X static int blank;
- X
- X blank = ' ' | (win->_attrs & ATR_MSK);
- X startx = win->_curx;
- X for (y = win->_cury; y <= win->_regbottom; y++)
- X {
- X minx = _NO_CHANGE;
- X end = &win->_line[y][win->_maxx - 1];
- X for (ptr = &win->_line[y][startx]; ptr <= end; ptr++)
- X {
- X if (*ptr != blank)
- X {
- X maxx = ptr;
- X if (minx == _NO_CHANGE)
- X minx = ptr - win->_line[y];
- X *ptr = blank;
- X } /* if */
- X } /* for */
- X if (minx != _NO_CHANGE)
- X {
- X if ((win->_minchng[y] > minx) || (win->_minchng[y] == _NO_CHANGE))
- X win->_minchng[y] = minx;
- X if (win->_maxchng[y] < maxx - win->_line[y])
- X win->_maxchng[y] = maxx - win->_line[y];
- X } /* if */
- X startx = 0;
- X } /* for */
- X return(OK);
- X } /* wclrtobot */
- X
- X/****************************************************************/
- X/* Clrtobot() fills the right half of the cursor line of */
- X/* stdscr, and all lines below it with blanks. */
- X/****************************************************************/
- X
- Xint clrtobot()
- X {
- X return(wclrtobot(stdscr));
- X } /* clrtobot */
- X
- X/****************************************************************/
- X/* Mvclrtobot() moves the cursor to a new position in stdscr */
- X/* and fills the right half of the cursor line, and all lines */
- X/* below it with blanks. */
- X/****************************************************************/
- X
- Xint mvclrtobot(y,x)
- X int y;
- X int x;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(wclrtobot(stdscr));
- X } /* mvclrtobot */
- X
- X/****************************************************************/
- X/* Mvwclrtobot() moves the cursor to a new position in window */
- X/* 'win', and fills the right half of the cursor line, and all */
- X/* lines below it with blanks. */
- X/****************************************************************/
- X
- Xint mvwclrtobot(win,y,x)
- X WINDOW *win;
- X int y;
- X int x;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(wclrtobot(win));
- X } /* mvwclrtobot */
- END_OF_FILE
- if test 3336 -ne `wc -c <'clrtobot.c'`; then
- echo shar: \"'clrtobot.c'\" unpacked with wrong size!
- fi
- # end of 'clrtobot.c'
- fi
- if test -f 'clrtoeol.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'clrtoeol.c'\"
- else
- echo shar: Extracting \"'clrtoeol.c'\" \(3119 characters\)
- sed "s/^X//" >'clrtoeol.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Wclrtoeol() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 880210 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_clrtoeol_rcsid[] = "@(#)clrtoeol.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wclrtoeol() fills the half of the cursor line to the right */
- X/* of the cursor in window 'win' with blanks. */
- X/****************************************************************/
- X
- Xint wclrtoeol(win)
- X WINDOW *win;
- X {
- X int *maxx;
- X int *ptr;
- X int *end;
- X static int y;
- X static int x;
- X static int minx;
- X static int blank;
- X
- X y = win->_cury;
- X x = win->_curx;
- X blank = ' ' | (win->_attrs & ATR_MSK);
- X
- X end = &win->_line[y][win->_maxx - 1];
- X minx = _NO_CHANGE;
- X maxx = &win->_line[y][x];
- X for (ptr = maxx; ptr <= end; ptr++)
- X {
- X if (*ptr != blank)
- X {
- X maxx = ptr;
- X if (minx == _NO_CHANGE)
- X minx = ptr - win->_line[y];
- X *ptr = blank;
- X } /* if */
- X } /* for */
- X
- X if (minx != _NO_CHANGE)
- X {
- X if (win->_minchng[y] > minx || win->_minchng[y] == _NO_CHANGE)
- X win->_minchng[y] = minx;
- X if (win->_maxchng[y] < maxx - win->_line[y])
- X win->_maxchng[y] = maxx - win->_line[y];
- X } /* if */
- X return(OK);
- X } /* wclrtoeol */
- X
- X/****************************************************************/
- X/* Clrtoeol() fills the half of the cursor line to the right */
- X/* of the cursor in stdscr with blanks. */
- X/****************************************************************/
- X
- Xint clrtoeol()
- X {
- X return(wclrtoeol(stdscr));
- X } /* clrtoeol */
- X
- X/****************************************************************/
- X/* Mvclrtoeol() moves the cursor to a new position in stdscr */
- X/* and fills the right half of the cursor line with blanks. */
- X/****************************************************************/
- X
- Xint mvcltoreol(y,x)
- X int y;
- X int x;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(wclrtoeol(stdscr));
- X } /* mvclrtoeol */
- X
- X/****************************************************************/
- X/* Mvwclrtoeol() moves the cursor to a new position in window */
- X/* 'win', and fills the right half of the cursor line with */
- X/* blanks. */
- X/****************************************************************/
- X
- Xint mvwclrtoeol(win,y,x)
- X WINDOW *win;
- X int y;
- X int x;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(wclrtoeol(win));
- X } /* mvwclrtoeol */
- END_OF_FILE
- if test 3119 -ne `wc -c <'clrtoeol.c'`; then
- echo shar: \"'clrtoeol.c'\" unpacked with wrong size!
- fi
- # end of 'clrtoeol.c'
- fi
- if test -f 'curspriv.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'curspriv.h'\"
- else
- echo shar: Extracting \"'curspriv.h'\" \(3818 characters\)
- sed "s/^X//" >'curspriv.h' <<'END_OF_FILE'
- X/****************************************************************/
- X/* CURSPRIV.H */
- X/* Header file for definitions and declarations for the */
- X/* PCcurses package. These definitions should not be gene- */
- X/* rally accessible to programmers. */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.1: Add _chadd() for raw output routines: 880306 */
- X/* 1.2: Support (by #ifdef UCMASM) for uppercase-only */
- X/* assembly routine names. If UCMASM if defined, */
- X/* all assembler names are #defined as upper case. */
- X/* Not needed if you do "MASM /MX. Also missing */
- X/* declaration of cursesscroll(). Fixes thanks to */
- X/* N.D. Pentcheff: 881002 */
- X/* 1.3: All modules lint-checked with MSC '-W3' and */
- X/* turbo'C' '-w -w-pro' switches: 881005 */
- X/****************************************************************/
- X
- X/* window properties */
- X
- X#define _SUBWIN 1 /* window is a subwindow */
- X#define _ENDLINE 2 /* last winline is last screen line */
- X#define _FULLWIN 4 /* window fills screen */
- X#define _SCROLLWIN 8 /* window lwr rgt is screen lwr rgt */
- X
- X/* Miscellaneous */
- X
- X#define _INBUFSIZ 200 /* size of terminal input buffer */
- X#define _NO_CHANGE -1 /* flags line edge unchanged */
- X
- X#define _BREAKCHAR 0x03 /* ^C character */
- X#define _DCCHAR 0x08 /* Delete Char char (BS) */
- X#define _DLCHAR 0x1b /* Delete Line char (ESC) */
- X#define _GOCHAR 0x11 /* ^Q character */
- X#define _PRINTCHAR 0x10 /* ^P character */
- X#define _STOPCHAR 0x13 /* ^S character */
- X#define NUNGETCH 10 /* max # chars to ungetch() */
- X
- X/* character mask definitions */
- X
- X#define CHR_MSK ((int) 0x00ff) /* ASCIIZ character mask */
- X#define ATR_MSK ((int) 0xff00) /* attribute mask */
- X#define ATR_NRM ((int) 0x0000) /* no special attributes */
- X
- X/* type declarations */
- X
- Xtypedef struct
- X {
- X WINDOW *tmpwin; /* window used for updates */
- X int cursrow; /* position of physical cursor */
- X int curscol;
- X bool autocr; /* if lf -> crlf */
- X bool cbreak; /* if terminal unbuffered */
- X bool echo; /* if terminal echo */
- X bool raw; /* if terminal raw mode */
- X bool refrbrk; /* if premature refresh brk allowed */
- X bool orgcbr; /* original MSDOS ^-BREAK setting */
- X } cursv;
- X
- X/* External variables */
- X
- Xextern cursv _cursvar; /* curses variables */
- X
- X/* 'C' standard library function declarations */
- X
- Xextern char *calloc();
- Xextern char *malloc();
- Xextern void free();
- Xextern int sprintf();
- Xextern int sscanf();
- X
- X/* Curses internal functions, not to be used by programmers */
- X
- X/* #Define UCMASM if your version of MASM does not support */
- X/* the '/MX' switch, or if you use another assembler */
- X
- X#ifdef UCMASM
- X#define _cursescattr _CURSESCATTR
- X#define _cursescmode _CURSESCMODE
- X#define _cursescursor _CURSESCURSOR
- X#define _cursesgcb _CURSESGCB
- X#define _cursesgcmode _CURSESGCMODE
- X#define _cursesgcols _CURSESGCOLS
- X#define _curseskey _CURSESKEY
- X#define _cursesscroll _CURSESSCROLL
- X#define _curseskeytst _CURSESKEYTST
- X#define _cursesputc _CURSESPUTC
- X#define _cursesscb _CURSESSCB
- X#endif
- X
- Xextern int _chadd();
- Xextern void _cursescattr();
- Xextern void _cursescmode();
- Xextern void _cursescursor();
- Xextern int _cursesgcb();
- Xextern int _cursesgcmode();
- Xextern int _cursesgcols();
- Xextern int _curseskey();
- Xextern bool _curseskeytst();
- Xextern void _cursesscroll();
- Xextern bool _cursespendch();
- Xextern void _cursesputc();
- Xextern void _cursesscb();
- END_OF_FILE
- if test 3818 -ne `wc -c <'curspriv.h'`; then
- echo shar: \"'curspriv.h'\" unpacked with wrong size!
- fi
- # end of 'curspriv.h'
- fi
- if test -f 'linedel.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'linedel.c'\"
- else
- echo shar: Extracting \"'linedel.c'\" \(3128 characters\)
- sed "s/^X//" >'linedel.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Wdeleteln() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_linedel_rcsid[] = "@(#)linedel.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wdeleteln() deletes the line at the window cursor, and the */
- X/* lines below it are shifted up, inserting a blank line at */
- X/* the bottom of the window. */
- X/****************************************************************/
- X
- Xint wdeleteln(win)
- X WINDOW *win;
- X {
- X int *end;
- X int *temp;
- X short y;
- X static int blank;
- X
- X blank = ' ' | (win->_attrs & ATR_MSK);
- X
- X temp = win->_line[win->_cury];
- X for (y = win->_cury; y < win->_regbottom; y++)
- X {
- X win->_line[y] = win->_line[y+1];
- X win->_minchng[y] = 0;
- X win->_maxchng[y] = win->_maxx - 1;
- X }
- X win->_minchng[y] = 0;
- X win->_maxchng[y] = win->_maxx - 1;
- X win->_line[win->_regbottom] = temp;
- X for (end = &(temp[win->_maxx -1]); temp <= end;)
- X *temp++ = blank;
- X return(OK);
- X } /* wdeleteln */
- X
- X/****************************************************************/
- X/* Deleteln() deletes the line at the stdscr cursor, and the */
- X/* lines below it are shifted up, inserting a blank line at */
- X/* the bottom of stdscr. */
- X/****************************************************************/
- X
- Xint deleteln()
- X {
- X return(wdeleteln(stdscr));
- X } /* deleteln */
- X
- X/****************************************************************/
- X/* Mvdeleteln() moves the cursor to a new position in stdscr, */
- X/* then deletes the line at the window cursor, and the lines */
- X/* below it are shifted up, inserting a blank line at the bot- */
- X/* tom of stdscr. */
- X/****************************************************************/
- X
- Xint mvdeleteln(y,x)
- X int y;
- X int x;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(wdeleteln(stdscr));
- X } /* mvdeleteln */
- X
- X/****************************************************************/
- X/* Mvwdeleteln() moves the cursor to a new position in a win- */
- X/* dow, then deletes the line at the window cursor, and the */
- X/* lines below it are shifted up, inserting a blank line at */
- X/* the bottom of the window. */
- X/****************************************************************/
- X
- Xint mvwdeleteln(win,y,x)
- X WINDOW *win;
- X int y;
- X int x;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(wdeleteln(win));
- X } /* mvwdeleteln */
- END_OF_FILE
- if test 3128 -ne `wc -c <'linedel.c'`; then
- echo shar: \"'linedel.c'\" unpacked with wrong size!
- fi
- # end of 'linedel.c'
- fi
- if test -f 'lineins.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lineins.c'\"
- else
- echo shar: Extracting \"'lineins.c'\" \(3010 characters\)
- sed "s/^X//" >'lineins.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Winsertln() routine of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.1: Mvinsertln() and friends were misrenamed: 880305 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_lineins_rcsid[] = "@(#)lineins.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Winsertln() inserts a blank line instead of the cursor line */
- X/* in window 'win' and pushes other lines down. */
- X/****************************************************************/
- X
- Xint winsertln(win)
- X WINDOW *win;
- X {
- X int *temp;
- X int *end;
- X short y;
- X static int blank;
- X
- X blank = ' ' | (win->_attrs & ATR_MSK);
- X temp = win->_line[win->_regbottom];
- X for (y = win->_regbottom; y > win->_cury; y--)
- X {
- X win->_line[y] = win->_line[y-1];
- X win->_minchng[y] = 0;
- X win->_maxchng[y] = win->_maxx - 1;
- X } /* for */
- X win->_line[win->_cury] = temp;
- X for (end = &temp[win->_maxx -1]; temp <= end; temp++)
- X *temp = blank;
- X win->_minchng[win->_cury] = 0;
- X win->_maxchng[win->_cury] = win->_maxx - 1;
- X return(OK);
- X } /* winsertln */
- X
- X/****************************************************************/
- X/* Insertln() inserts a blank line instead of the cursor line */
- X/* in stdscr and pushes other lines down. */
- X/****************************************************************/
- X
- Xint insertln()
- X {
- X return(winsertln(stdscr));
- X } /* insertln */
- X
- X/****************************************************************/
- X/* Mvinsertln() moves the stdscr cursor to a new positions, in- */
- X/* serts a blank line instead of the cursor line and pushes */
- X/* other lines down. */
- X/****************************************************************/
- X
- Xint mvinsertln(y,x)
- X int y;
- X int x;
- X {
- X if (wmove(stdscr,y,x) == ERR)
- X return(ERR);
- X return(winsertln(stdscr));
- X } /* mvinsertln */
- X
- X/****************************************************************/
- X/* Mvwinsertln() moves the cursor in window 'win' to a new po- */
- X/* si tions, inserts a blank line instead of the cursor line */
- X/* and pushes other lines down. */
- X/****************************************************************/
- X
- Xint mvwinsertln(win,y,x)
- X WINDOW *win;
- X int y;
- X int x;
- X {
- X if (wmove(win,y,x) == ERR)
- X return(ERR);
- X return(winsertln(win));
- X } /* mvwinsertln */
- END_OF_FILE
- if test 3010 -ne `wc -c <'lineins.c'`; then
- echo shar: \"'lineins.c'\" unpacked with wrong size!
- fi
- # end of 'lineins.c'
- fi
- if test -f 'options.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'options.c'\"
- else
- echo shar: Extracting \"'options.c'\" \(4288 characters\)
- sed "s/^X//" >'options.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Idlok(), clearok(), leaveok(), scrollok(), nodelay(), key- */
- X/* pad(), meta(), cursoff() and curson() routines of the */
- X/* PCcurses package. */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Rcsid[] string for maintenance: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_options_rcsid[] = "@(#)option.c v1.3 - 881005";
- X
- Xstatic bool hasold = FALSE; /* for remembering old cursor type */
- Xstatic int oldmode;
- X
- X/****************************************************************/
- X/* Idlok() is used to set flag for using the terminal insert/ */
- X/* delete line capabilities. This is not relevant for the PC */
- X/* version of curses, and thus nothing is done. */
- X/****************************************************************/
- X
- Xvoid idlok()
- X {
- X } /* idlok */
- X
- X/****************************************************************/
- X/* Clearok() marks window 'win' to cause screen clearing and */
- X/* redraw the next time a refresh is done. */
- X/****************************************************************/
- X
- Xvoid clearok(win, flag)
- X WINDOW *win;
- X bool flag;
- X {
- X if (win == curscr)
- X _cursvar.tmpwin->_clear = flag;
- X else
- X win->_clear = flag;
- X } /* clearok */
- X
- X/****************************************************************/
- X/* Leaveok() marks window 'win' to allow the update routines */
- X/* to leave the hardware cursor where it happens to be at the */
- X/* end of update. Usually used in combination with cursoff(). */
- X/****************************************************************/
- X
- Xvoid leaveok(win, flag)
- X WINDOW *win;
- X bool flag;
- X {
- X win->_leave = flag;
- X } /* leaveok */
- X
- X/****************************************************************/
- X/* Scrollok() marks window 'win' to allow the scrolling region */
- X/* of it to actually scroll. */
- X/****************************************************************/
- X
- Xvoid scrollok(win, flag)
- X WINDOW *win;
- X bool flag;
- X {
- X win->_scroll = flag;
- X } /* scrollok */
- X
- X/****************************************************************/
- X/* Nodelay() marks the window to make character input non- */
- X/* waiting, i.e. if there is no character to get, -1 will be */
- X/* returned. */
- X/****************************************************************/
- X
- Xvoid nodelay(win, flag)
- X WINDOW *win;
- X bool flag;
- X {
- X win->_nodelay = flag;
- X } /* nodelay */
- X
- X/****************************************************************/
- X/* Keypad() marks window 'win' to use the special keypad mode. */
- X/****************************************************************/
- X
- Xvoid keypad(win, flag)
- X WINDOW *win;
- X bool flag;
- X {
- X win->_keypad = flag;
- X } /* keypad */
- X
- X/****************************************************************/
- X/* Meta() allows use of any alternate character set allowed by */
- X/* the terminal. We always allow this on the PC, so this one */
- X/* does nothing. */
- X/****************************************************************/
- X
- Xvoid meta()
- X {
- X } /* meta */
- X
- X/****************************************************************/
- X/* Cursoff() turns off the hardware cursor. */
- X/****************************************************************/
- X
- Xvoid cursoff()
- X {
- X if (!hasold)
- X {
- X oldmode = _cursesgcmode(); /* get old cursor type */
- X hasold = TRUE;
- X }
- X _cursescmode(31,30); /* turn it off */
- X } /* cursoff */
- X
- X/****************************************************************/
- X/* Curson() turns on the hardware cursor. */
- X/****************************************************************/
- X
- Xvoid curson()
- X {
- X if (hasold)
- X {
- X _cursescmode(oldmode >> 8,oldmode);
- X hasold = FALSE;
- X }
- X } /* curson */
- END_OF_FILE
- if test 4288 -ne `wc -c <'options.c'`; then
- echo shar: \"'options.c'\" unpacked with wrong size!
- fi
- # end of 'options.c'
- fi
- if test -f 'overlay.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'overlay.c'\"
- else
- echo shar: Extracting \"'overlay.c'\" \(3687 characters\)
- sed "s/^X//" >'overlay.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Overlay() and overwrite() functions of the PCcurses package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_overlay_rcsid[] = "@(#)overlay.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Overlay() overwrites 'win1' upon 'win2', with origins alig- */
- X/* ned. Overlay is transparent; blanks from 'win1' are not */
- X/* copied to 'win2'. */
- X/****************************************************************/
- X
- Xvoid overlay(win1, win2)
- X WINDOW *win1, *win2;
- X {
- X int *minchng;
- X int *maxchng;
- X int *w1ptr;
- X int *w2ptr;
- X int attrs;
- X int col;
- X int line;
- X int last_line;
- X int last_col;
- X
- X last_col = min(win1->_maxx, win2->_maxx) - 1;
- X last_line = min(win1->_maxy, win2->_maxy) - 1;
- X attrs = win2->_attrs & ATR_MSK;
- X minchng = win2->_minchng;
- X maxchng = win2->_maxchng;
- X
- X for(line = 0; line <= last_line; line++)
- X {
- X register short fc, lc;
- X w1ptr = win1->_line[line];
- X w2ptr = win2->_line[line];
- X fc = _NO_CHANGE;
- X for(col = 0; col <= last_col; col++)
- X {
- X if ((*w1ptr & CHR_MSK) != ' ')
- X {
- X *w2ptr = (*w1ptr & CHR_MSK) | attrs;
- X if (fc == _NO_CHANGE)
- X fc = col;
- X lc = col;
- X } /* if */
- X w1ptr++;
- X w2ptr++;
- X } /* for */
- X
- X if (*minchng == _NO_CHANGE)
- X {
- X *minchng = fc;
- X *maxchng = lc;
- X } /* if */
- X else
- X if (fc != _NO_CHANGE)
- X {
- X if (fc < *minchng)
- X *minchng = fc;
- X if (lc > *maxchng)
- X *maxchng = lc;
- X } /* else if */
- X minchng++;
- X maxchng++;
- X } /* for */
- X } /* overlay */
- X
- X/****************************************************************/
- X/* Overwrite() overwrites 'win1' upon 'win2', with origins */
- X/* aligned. Overwrite is non-transparent; blanks from 'win1' */
- X/* are copied to 'win2'. */
- X/****************************************************************/
- X
- Xvoid overwrite(win1, win2)
- X WINDOW *win1, *win2;
- X {
- X int *minchng;
- X int *maxchng;
- X int *w1ptr;
- X int *w2ptr;
- X int attrs;
- X int col;
- X int line;
- X int last_line;
- X int last_col;
- X
- X last_col = min(win1->_maxx, win2->_maxx) - 1;
- X last_line = min(win1->_maxy, win2->_maxy) - 1;
- X attrs = win2->_attrs & ATR_MSK;
- X minchng = win2->_minchng;
- X maxchng = win2->_maxchng;
- X
- X for(line = 0; line <= last_line; line++)
- X {
- X register short fc, lc;
- X
- X w1ptr = win1->_line[line];
- X w2ptr = win2->_line[line];
- X fc = _NO_CHANGE;
- X
- X for(col = 0; col <= last_col; col++)
- X {
- X if ((*w1ptr & CHR_MSK) != (*w2ptr & CHR_MSK))
- X {
- X *w2ptr = (*w1ptr & CHR_MSK) | attrs;
- X
- X if (fc == _NO_CHANGE)
- X fc = col;
- X lc = col;
- X } /* if */
- X
- X w1ptr++;
- X w2ptr++;
- X } /* for */
- X
- X if (*minchng == _NO_CHANGE)
- X {
- X *minchng = fc;
- X *maxchng = lc;
- X } /* if */
- X else
- X if (fc != _NO_CHANGE)
- X {
- X if (fc < *minchng)
- X *minchng = fc;
- X if (lc > *maxchng)
- X *maxchng = lc;
- X } /* else if */
- X minchng++;
- X maxchng++;
- X } /* for */
- X } /* overwrite */
- END_OF_FILE
- if test 3687 -ne `wc -c <'overlay.c'`; then
- echo shar: \"'overlay.c'\" unpacked with wrong size!
- fi
- # end of 'overlay.c'
- fi
- if test -f 'refresh.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'refresh.c'\"
- else
- echo shar: Extracting \"'refresh.c'\" \(3441 characters\)
- sed "s/^X//" >'refresh.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Wrefresh() and wnoutrefresh() routines of the PCcurses */
- X/* package */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Max limits off by 1. Fixed thanks to S. Creps: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_refresh_rcsid[] = "@(#)refresh.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Wrefresh() updates window win's area of the physical screen. */
- X/****************************************************************/
- X
- Xvoid wrefresh(win)
- X WINDOW *win;
- X {
- X if (win == curscr)
- X curscr->_clear = TRUE;
- X else
- X wnoutrefresh(win);
- X doupdate();
- X } /* wrefresh */
- X
- X/****************************************************************/
- X/* Wnoutrefresh() updates the image of the desired screen, */
- X/* without doing physical update (copies window win's image to */
- X/* the _cursvar.tmpwin window, which is hidden from the user). */
- X/****************************************************************/
- X
- Xvoid wnoutrefresh(win)
- X register WINDOW *win;
- X {
- X register int *dst; /* start destination in temp window */
- X register int *end; /* end destination in temp window */
- X register int *src; /* source in user window */
- X register int first; /* first changed char on line */
- X register int last; /* last changed char on line */
- X static WINDOW *nscr;
- X static int begy; /* window's place on screen */
- X static int begx;
- X static int i;
- X static int j;
- X
- X nscr = _cursvar.tmpwin;
- X begy = win->_begy;
- X begx = win->_begx;
- X
- X for (i=0, j=begy; i < win->_maxy; i++, j++)
- X {
- X if (win->_minchng[i] != _NO_CHANGE)
- X {
- X first = win->_minchng[i];
- X last = win->_maxchng[i];
- X dst = &(nscr->_line[j][begx + first]);
- X end = &(nscr->_line[j][begx + last]);
- X src = &(win->_line[i][first]);
- X
- X while (dst <= end) /* copy user line to temp window */
- X *dst++ = *src++;
- X
- X first += begx; /* nscr's min/max change positions */
- X last += begx;
- X
- X if ((nscr->_minchng[j] == _NO_CHANGE)||(nscr->_minchng[j] > first))
- X nscr->_minchng[j] = first;
- X if (last > nscr->_maxchng[j])
- X nscr->_maxchng[j] = last;
- X
- X win->_minchng[i] = _NO_CHANGE; /* updated now */
- X } /* if */
- X win->_maxchng[i] = _NO_CHANGE; /* updated now */
- X } /* for */
- X
- X if (win->_clear)
- X {
- X win->_clear = FALSE;
- X nscr->_clear = TRUE;
- X } /* if */
- X
- X if (!win->_leave)
- X {
- X nscr->_cury = win->_cury + begy;
- X nscr->_curx = win->_curx + begx;
- X } /* if */
- X } /* wnoutrefresh */
- X
- X/****************************************************************/
- X/* Refresh() updates stdscr's area of the physical screen. */
- X/****************************************************************/
- X
- Xvoid refresh()
- X {
- X wrefresh(stdscr);
- X } /* refresh */
- END_OF_FILE
- if test 3441 -ne `wc -c <'refresh.c'`; then
- echo shar: \"'refresh.c'\" unpacked with wrong size!
- fi
- # end of 'refresh.c'
- fi
- if test -f 'setmode.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'setmode.c'\"
- else
- echo shar: Extracting \"'setmode.c'\" \(3268 characters\)
- sed "s/^X//" >'setmode.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Terminal mode routines of the PCcurses package. */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* BUT: this particular module was written by */
- X/* N. Dean Pentcheff (dean@violet.berkeley.edu) */
- X/* It provides PC Curses versions of: */
- X/* reset_prog_mode(); */
- X/* reset_shell_mode(); */
- X/* set_prog_mode(); */
- X/* set_shell_mode(); */
- X/* */
- X/* B. Larsson took the liberty to modify its style slightly */
- X/* when incorporating it into PCcurses v.1.2. The routines in */
- X/* this module do a similar thing to savetty() and resetty(). */
- X/****************************************************************/
- X/* 1.2: Style clean-up, rcsid[] string for maintenance: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xstruct cttyset
- X {
- X bool been_set;
- X bool oautocr;
- X bool ocbreak;
- X bool oecho;
- X bool oraw;
- X };
- X
- Xchar _curses_setmode_rcsid[] = "@(#)setmode.c v1.3 - 881005";
- X
- Xstatic struct cttyset sh_tty = {FALSE};/* tty modes for shell_mode */
- Xstatic struct cttyset pr_tty = {FALSE};/* tty modes for prog_mode */
- X
- X/****************************************************************/
- X/* Def_prog_mode() saves the current tty status, to be recalled */
- X/* later by reset_prog_mode. */
- X/****************************************************************/
- X
- Xvoid def_prog_mode()
- X {
- X pr_tty.been_set = TRUE;
- X pr_tty.oautocr = _cursvar.autocr;
- X pr_tty.ocbreak = _cursvar.cbreak;
- X pr_tty.oecho = _cursvar.echo;
- X pr_tty.oraw = _cursvar.raw;
- X } /* def_prog_mode */
- X
- X/****************************************************************/
- X/* Reset_prog_mode() resets tty modes to the values saved in a */
- X/* call to def_prog_mode. */
- X/****************************************************************/
- X
- Xvoid reset_prog_mode()
- X {
- X if (pr_tty.been_set == TRUE)
- X {
- X _cursvar.autocr = pr_tty.oautocr;
- X _cursvar.cbreak = pr_tty.ocbreak;
- X _cursvar.echo = pr_tty.oecho;
- X _cursvar.raw = pr_tty.oraw;
- X } /* if */
- X } /* reset_prog_mode */
- X
- X/****************************************************************/
- X/* Def_shell_mode() saves the tty status, to be recalled by */
- X/* reset_shell_mode. A noop in PCcurses. */
- X/****************************************************************/
- X
- Xvoid def_shell_mode()
- X {
- X } /* def_shell_mode */
- X
- X/****************************************************************/
- X/* Reset_shell_mode() resets the tty status to the status it */
- X/* had before curses began. */
- X/****************************************************************/
- X
- Xvoid reset_shell_mode()
- X {
- X _cursvar.autocr = TRUE;
- X _cursvar.cbreak = FALSE;
- X _cursvar.echo = TRUE;
- X _cursvar.raw = FALSE;
- X } /* reset_shell_mode */
- END_OF_FILE
- if test 3268 -ne `wc -c <'setmode.c'`; then
- echo shar: \"'setmode.c'\" unpacked with wrong size!
- fi
- # end of 'setmode.c'
- fi
- if test -f 'setterm.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'setterm.c'\"
- else
- echo shar: Extracting \"'setterm.c'\" \(3007 characters\)
- sed "s/^X//" >'setterm.c' <<'END_OF_FILE'
- X/****************************************************************/
- X/* Raw(), noraw(), echo(), noecho(), nl(), nonl(), cbreak(), */
- X/* nocbreak(), crmode(), nocrmode() and refrbrk() routines of */
- X/* the PCcurses package. */
- X/* */
- X/****************************************************************/
- X/* This version of curses is based on ncurses, a curses version */
- X/* originally written by Pavel Curtis at Cornell University. */
- X/* I have made substantial changes to make it run on IBM PC's, */
- X/* and therefore consider myself free to make it public domain. */
- X/* Bjorn Larsson (...mcvax!enea!infovax!bl) */
- X/****************************************************************/
- X/* 1.0: Release: 870515 */
- X/* 1.2: Rcsid[] string for maintenance: 881002 */
- X/* 1.3: MSC -W3, Turbo'C' -w -w-pro checkes: 881005 */
- X/****************************************************************/
- X
- X#include <curses.h>
- X#include <curspriv.h>
- X
- Xchar _curses_setterm_rcsid[] = "@(#)setterm.c v1.3 - 881005";
- X
- X/****************************************************************/
- X/* Raw() and noraw() sets or clears raw mode. */
- X/****************************************************************/
- X
- Xvoid raw()
- X {
- X _cursvar.raw = TRUE;
- X _cursesscb(FALSE); /* disallow ^BREAK on disk I/O */
- X flushinp();
- X } /* raw */
- X
- Xvoid noraw()
- X {
- X _cursvar.raw = FALSE;
- X _cursesscb(_cursvar.orgcbr); /* restore original ^BREAK status */
- X } /* noraw */
- X
- X/****************************************************************/
- X/* Echo() and noecho() sets or clears echo mode. */
- X/****************************************************************/
- X
- Xvoid echo()
- X {
- X _cursvar.echo = TRUE;
- X } /* echo */
- X
- Xvoid noecho()
- X {
- X _cursvar.echo = FALSE;
- X } /* noecho */
- X
- X/****************************************************************/
- X/* Nl() and nonl() sets or clears autocr mapping mode. */
- X/****************************************************************/
- X
- Xvoid nl()
- X {
- X _cursvar.autocr = TRUE;
- X } /* nl */
- X
- Xvoid nonl()
- X {
- X _cursvar.autocr = FALSE;
- X } /* nonl */
- X
- X/****************************************************************/
- X/* Cbreak(), nocbreak(), crmode() amd nocrmode() sets or */
- X/* clears cbreak mode. */
- X/****************************************************************/
- X
- Xvoid cbreak()
- X {
- X _cursvar.cbreak = TRUE;
- X } /* cbreak */
- X
- Xvoid nocbreak()
- X {
- X _cursvar.cbreak = FALSE;
- X } /* nocbreak */
- X
- Xvoid crmode()
- X {
- X _cursvar.cbreak = TRUE;
- X } /* crmode */
- X
- Xvoid nocrmode()
- X {
- X _cursvar.cbreak = FALSE;
- X } /* nocrmode */
- X
- X/****************************************************************/
- X/* Refrbrk() sets or unsets the screen refresh break flag. If */
- X/* this flag is set, and there is any input available, any */
- X/* screen refresh will be prematurely terminated, anticipating */
- X/* more screen updates. This flag is FALSE by default. */
- X/****************************************************************/
- X
- Xvoid refrbrk(bf)
- X bool bf;
- X {
- X _cursvar.refrbrk = bf;
- X } /* refrbrk */
- END_OF_FILE
- if test 3007 -ne `wc -c <'setterm.c'`; then
- echo shar: \"'setterm.c'\" unpacked with wrong size!
- fi
- # end of 'setterm.c'
- fi
- echo shar: End of archive 2 \(of 5\).
- cp /dev/null ark2isdone
- MISSING=""
- for I in 1 2 3 4 5 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 5 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-